package com.gz.controller;

import com.gz.entity.User;
import com.gz.mapper.UserMapper;
import com.gz.service.UserService;
import com.gz.util.CaptchaUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@Controller
public class controller {
    
    @Autowired
    UserService userService;
    

    // 网站默认页面
    @RequestMapping("/")
    public String index(HttpServletRequest request, Model model){
        HttpSession httpSession =  request.getSession(true);
        model.addAttribute("sessionId", httpSession.getId());
        return "index";
    }
    
    // 登陆页面
    @RequestMapping("/showLogin")
    public String showLogin(){
        return "login";
    }
    
    // 注册页面
    @RequestMapping("/showRegister")
    public String showRegister(){
        return "register";
    }
    
    // 注册的后台地址
    @RequestMapping("/register")
    public String register(HttpServletRequest request,
                           String username,
                           String password) throws Exception{
    
        userService.insertUser(username, password);
        return "login";
    }
    
    /**
     *
     * @return
     * @throws Exception
     */
    @RequestMapping("/code")
    @ResponseBody
    public void code(
            HttpServletRequest request,
            HttpServletResponse response
    ) throws Exception{
        CaptchaUtil.outputCaptcha(request, response);
    }
    
    @RequestMapping("/yanZhengMa")
    @ResponseBody
    public String yanZhengMa(
            HttpServletRequest request,
            HttpServletResponse response
    ) throws Exception{
        return "1234";
    }
    
    
    // 验证登陆的逻辑代码
    @RequestMapping("/login")
    public String login(
            HttpServletRequest request,
            HttpServletResponse response,
            String username,
            String password,
            String code,
            Model model
    ) throws Exception {
    
//        ModelAndView mv = new ModelAndView();
//        mv.addObject()
//        mv.setViewName();
        
        // 接收到 表单数据
        
        // 根据 提交的 用户名 从数据库中查找用户是否存在
        // select * from user where user_name = username
        
        User u = userService.selectByUserName(username);
        
        // 怎么样判断数据库中是存在用户的
        // 请求的的转发与重定向的却别？
        
        if(u == null) {
            System.out.println("账号不存在！");
//            return "forward:/showLogin";
            return "forward:/showLogin";
        }
        
        // 如果用户存在，那么， 接着判断密码 是否正确
        // 判断密码 是否正确, 必须要有一个比较的对象
        // 表单的密码参数与数据库中查询出来的用户的密码比较
    
    
        // 如果密码不正确， 跳转到 登录页面
    
        if(!password.equals(u.getUserPassword())){
            System.out.println("密码不正确！");
            return "/showLogin";
        }
        
        // 验证码验证逻辑
        // 用户输入的验证码与后台生成的验证码进行比对
        // 多个 http 请求共享数据
    
        HttpSession httpSession =  request.getSession(true);
        String sessionId = httpSession.getId();
    
        httpSession.setAttribute("sessionId", sessionId);
        
        String randCode = httpSession.getAttribute("randCode").toString();
        
        // 比较不区分大小写
        if(!code.equalsIgnoreCase(randCode)){
            System.out.println("验证码不正确！");
            return "/showLogin";
        }
        
        
        // 若果密码正确， 跳转到 首页
        // 跳转到 首页之后， 在 首页 把 用户名显示出来
        // 如果把数据通过 传递给 JSP 页面
        // jstl表达式
        // EL 表达式
    
        model.addAttribute("username", u.getUserName());
        
        // 程序跳转到 首页界面
        return "/index";
    }
    
    // 注册页面
    @RequestMapping("/fileList")
    public String fileList(){
        return "file_list";
    }
    
    /**
     * 判断 账号 是否存在
     * @param username
     * @return
     * @throws Exception
     */
    @RequestMapping("/isExistedNickName")
    @ResponseBody
    public boolean isExistedNickName(
            HttpServletRequest request,
            HttpServletResponse response,
            String username
    ) throws Exception{
        return userService.isExistedNickName(username);
    }

    
    
    
}
